using System;
using System.Collections.Generic;
using System.Linq;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Audio;
using Microsoft.Xna.Framework.Content;
using Microsoft.Xna.Framework.GamerServices;
using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework.Input;
using Microsoft.Xna.Framework.Media;
using Microsoft.Xna.Framework.Net;
using Microsoft.Xna.Framework.Storage;


namespace MenuComponent
{
    /// <summary>
    ///Aqui dispondremos de las variables globales
    /// </summary>
    public class movimiento_enemigo 
    {
        Game1 Game1obj;
        Random r;
        public int vidas;
        public movimiento_enemigo()
            
        {
            // TODO: Construct any child components here
        }

        /// <summary>
        /// esta funcion devuelve el pacman y los enemigos a la posicion inicial de partida
        /// </summary>
        /// 
        public void vuelve_origen(int[,] matriz)
        {
            int i, z;
            for (i = 0; i < 20; i++)
            {
                for (z = 0; z < 20; z++)
                {
                    if (matriz[i, z] == 3)
                        matriz[i, z] = 0;
                    if (matriz[i, z] == 4)
                        matriz[i, z] = 1;
                    if (matriz[i, z] == 5)
                        matriz[i, z] = 0;

                }
            }
            //pacman
            matriz[0, 0] = 3;
            //enemigo1
            if (matriz[19,19]==1)
            matriz[19, 19] = 4;
            else
                matriz[19, 19] = 5;
            //enemigo2
            if (matriz[19, 0] == 1)
                matriz[19, 0] = 4;
            else
                matriz[19, 0] = 5;
            //enemigo3
            if (matriz[0, 19] == 1)
                matriz[0, 19] = 4;
            else
                matriz[0, 19] = 5;
            //enemigo4
            if (matriz[11, 10] == 1)
                matriz[11, 10] = 4;
            else
                matriz[11, 10] = 5;
            //enemigo5
            if (matriz[8, 8] == 1)
                matriz[8, 8] = 4;
            else
                matriz[8, 8] = 5; ;
        }
        /// <summary>
        /// esta funcion inicializa el movimiento enemigo asi como las vidas
        /// </summary>
        public  void Initialize()
        {
            // TODO: Add your initialization code here
            
            r= new Random(DateTime.Now.Millisecond);
            Game1obj = new Game1();
            vidas = 3;
        }

        /// <summary>
        /// Funcion para controlar la perdida de vidas
        /// </summary>
      
        public void decrementa_vida()
        {
            if (vidas == 0)
                Game1obj.estado = 5;
            vidas--;
          
            
        }
        /// <summary>
        /// este metodo hace moverse al enemigo usando la matriz que le llega y comprobando que se puede mover a ese sitio
        /// </summary>
        /// <param name="x"></param>
        /// <param name="y"></param>
        /// <param name="matriz"></param>
        public void muevete(int x, int y, int[,] matriz)
        {
            
            int i, z,a,b;
            z = y;
            i = x;
            a = x;
            b = y;
            
            x = r.Next(3);
            y = r.Next(3);

            if (z > 18)
                z = 18;
            if (z < 1)
                z = 1;
            if (i > 18)
                i = 18;
            if (i < 1)
                i = 1;
 
            if ((matriz[i + x - 1, z + y - 1] != 2)&&(matriz[i + x - 1, z + y - 1] != 4)&&(matriz[i + x - 1, z + y - 1] != 5))
            {
                if (matriz[i + (x - 1), z + (y - 1)] == 1 || matriz[i + (x - 1), z + (y - 1)] == 0)
                {
                    if (matriz[a, b] == 4)
                    {
                        matriz[a, b] = 1;
                    }
                    if (matriz[a, b] == 5)
                    {
                        matriz[a, b] = 0;
                    }
                    
                }
                if (matriz[i + x - 1, z + y - 1] == 1)
                {
                    matriz[i + x - 1, z + y - 1] = 4;
                }
                if (matriz[i + x - 1, z + y - 1] == 0)
                {
                    matriz[i + x - 1, z + y - 1] = 5;
                }
                if (matriz[i + x - 1, z + y - 1] == 3)
                {
                    //esta llamada decrementara la vida en uno y devolvera las banderitas de windows
                    //y el come cocos a sus lugares de origen
                    decrementa_vida();
                    vuelve_origen(matriz);
                }
            }      

            //          


       
       
        }
        /// <summary>
        /// Este metodo comprueba donde esta el enemigo y hace una llamada a muevete para lograr el movimiento del mismo
        /// </summary>
        /// <param name="matriz"></param>
        public  void Update(int[,] matriz)
        {
         
                int x = 0;
                int y = 0;

                int i;
                int z;
                for (i = 0; i < 20; i++)
                {
                    for (z = 0; z < 20; z++)
                        //al diferenciar la matriz con 4 y 5 indicamos con un 4 la casilla esta tambien ocupada con un error y con un 5 no
                    {
                        if ((matriz[i, z] == 4) || (matriz[i, z] == 5))
                        {
                            x = i;
                            y = z;
                            muevete(x,y,matriz);
                        }

                    }
                }
                // TODO: Add your update code here

                
            
        }
    }
}